package com.huawei.stream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.OptionalDouble;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * ‌过滤和收集‌：给定一个整数列表，使用Stream API过滤出所有的偶数，并将它们收集到一个新的列表中
 */
public class Demo01 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(new Random().nextInt(20));
        list.add(new Random().nextInt(20));
        list.add(new Random().nextInt(20));

        System.out.println(list);
        List<Integer> collect = list.stream().filter(v -> v > 10).collect(Collectors.toList());
        System.out.println(collect);

        //确定上述列表是否有数字能被4 整除

        boolean b = collect.stream().anyMatch(v -> v % 4 == 0);
        System.out.println(b);

        //对上述列表中的每个数字进行平方操作，然后将结果排序（降序）

        List<Integer> ans = list.stream().map(v -> (int) Math.pow(v, 2)).sorted((a, c) -> (c - a)).collect(Collectors.toList());
        System.out.println(ans);

        //计算上述列表中所有数字的总和，以及计算所有数字的平均值
        long sum = list.stream().mapToInt(Integer::intValue).sum();
        OptionalDouble average = list.stream().mapToInt(Integer::intValue).average();
        System.out.println(sum);
        System.out.println(average.getAsDouble());

        //给定一个字符串列表，将这些字符串扁平化成一个字符列表，并过滤掉所有元音字母
//        List<String> list1 = Arrays.asList("123", "a1b", "cd");
//        list1.stream().flatMap(v->{
//            List<Character> characters =
//            return ;
//        }).collect(Collectors.toList())


        List<List<String>> nestedWords = Arrays.asList(
                Arrays.asList("hello", "world"),
                Arrays.asList("java", "stream")
        );
        System.out.println(nestedWords);
        List<String> flattenedWords = nestedWords.stream()
                .flatMap(List::stream)
                .collect(Collectors.toList());
        System.out.println(flattenedWords);


    }
}
